/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Model.Cliente;
import Principals.Constantes;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.List;
import org.hibernate.Query;

/**
 *
 * @author Paola
 */
public class ClienteDAO {

    public static Cliente registrarCliente(Cliente cliente) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.save(cliente);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "cliente", cliente.getIdCliente() + "->" + cliente.getNombres(), Constantes.LOG_INSERT);
        }
        return cliente;
    }

    public static void modificarCliente(Cliente cliente) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.update(cliente);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "cliente", cliente.getIdCliente() + "->" + cliente.getNombres(), Constantes.LOG_UPDATE);
        }
    }

    public static List<Cliente> buscarCliente(String nombre, String apPaterno, String apMaterno, String docIdentidad) {
        String q = "from Cliente";
        int cont = 0;
        if (nombre != null || apPaterno != null || apMaterno != null || docIdentidad != null) {
            q += " where ";
        }
        if (nombre != null) {
            q += " lower(nombres) LIKE lower(:nombres)";
            cont++;
        }
        if (apPaterno != null) {
            if (cont > 0) {
                q += " AND ";
            }
            q += " lower(apellido_paterno) LIKE lower(:apPaterno)";
            cont++;
        }
        if (apMaterno != null) {
            if (cont > 0) {
                q += " AND ";
            }
            q += " lower(apellido_materno) LIKE lower(:apMaterno)";
            cont++;
        }
        if (docIdentidad != null) {
            if (cont > 0) {
                q += " AND ";
            }
            q += " lower(nro_documento) LIKE lower(:docIdentidad)";
            cont++;
        }

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        if (nombre != null) {
            query.setParameter("nombres", "%" + nombre + "%");
        }
        if (apPaterno != null) {
            query.setParameter("apPaterno", "%" + apPaterno + "%");
        }
        if (apMaterno != null) {
            query.setParameter("apMaterno", "%" + apMaterno + "%");
        }
        if (docIdentidad != null) {
            query.setParameter("docIdentidad", "%" + docIdentidad + "%");
        }
        Main.usrSesion.session.getTransaction().commit();

        return query.list();

    }

    public static Cliente cargarCliente(int idCliente) {
        String q = "from Cliente where id=:id";

        Main.usrSesion.session.beginTransaction();

        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("id", idCliente);
        Cliente c = (Cliente) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();

        return c;
    }
    public static Cliente existeDocId(String docId) {
        try{
            String q = "from Cliente where nro_documento=:docId";

            Main.usrSesion.session.beginTransaction();

            Query query = Main.usrSesion.session.createQuery(q);
            query.setParameter("docId", docId);
            Cliente c = (Cliente) query.uniqueResult();
            Main.usrSesion.session.getTransaction().commit();
             return c;        
        } 
        catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
            return null;
        }
        
    }
}
